#pragma once

#include <allegro5/allegro.h>
#include <allegro5/allegro_ttf.h>
#include <memory>
#include <string>
#include <array>

class Timer
{
private:
	// Display
	std::shared_ptr<ALLEGRO_FONT>	_font;
	int								_font_size;
	std::string						_display_fps;
	std::string						_display_mspf;
	float							_fps;  // Frames Per Second
	float							_mspf; // Milliseconds Per Frame

	// Timer Control
	bool _paused;
	bool _resumed;

	// Time Measurement
	__int64							_counts_this_frame;
	__int64							_counts_last_frame;
	double							_seconds_per_count;
	std::shared_ptr<ALLEGRO_TIMER>	_allegro_timer;

	float _dt;

	__int64 _GetCounts();

	void _CreateFont();

public:
	Timer();

	float GetDT() const;

	void Pause();
	void Resume();
	bool IsPaused() const;

	void Update();

	void DrawTimerText() const;
};